/*
 * @Author: 一路向阳 tt_sunzhenfeng@163.com
 * @Date: 2024-02-22 15:33:46
 * @LastEditors: 一路向阳 tt_sunzhenfeng@163.com
 * @LastEditTime: 2024-02-22 15:51:39
 * @FilePath: \utils_ts\23.抽象类和方法.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
export {};

// 抽象类是普通类的描述，指定一个类的规范，给普通的类去继承
// 继承之后，普通类里面就必须定义抽象类里面的抽象属性和抽象方法. 抽象类里面的普通方法直接继承，在普通类里面可以不用实现
abstract class Person {
  abstract name: string;
  abstract getName(): string;
  getAge() {
    return 11;
  }
}

// 普通类
class Male extends Person {
  name: string = 'male';
  getName() {
    return this.name;
  }
}

let m1 = new Male();
console.log(m1.getName());
console.log(m1.getAge());

// 抽象类不能被实例化
// let p1 = new Person();

// 书写接口，给类使用
interface IPerson {
  name: string;
  age: number;
  getName: () => void;
}

class M implements IPerson {
  name: string = 'male';
  age: number = 11;
  getName() {
    return this.name;
  }
}

let m = new M();
